package com.tom.springframework.beans.factory;


import com.tom.springframework.beans.BeansException;

/**
 * Bean工厂接口，定义通过名称获取Bean对象统一标准
 *
 * @author zx
 * @date 2024-11-05 09:40
 */
public interface BeanFactory {

    /**
     * 根据Bean名称获取Bean对象
     *
     * @param name Bean名称
     * @return 对应的Bean实例对象
     * @throws BeansException 不能获取Bean对象的时候抛出异常
     */
    Object getBean(String name) throws BeansException;

    /**
     * 返回含构造函数的Bean实例对象
     *
     * @param name Bean名称
     * @param args 构造函数入参
     * @return 实例化的Bean对象
     * @throws BeansException 不能获取Bean对象,则抛出异常
     */
    Object getBean(String name, Object... args) throws BeansException;

    /**
     * 返回指定泛型的对象
     * @param name  要检索的bean的名称
     * @param requiredType 类型
     * @param <T>          泛型
     * @return             实例化的 Bean 对象
     * @throws BeansException 不能获取 Bean 对象，则抛出异常
     */
    <T> T getBean(String name, Class<T> requiredType) throws BeansException;

}
